Aga Chipset Part 1 (c) Zetter 2000 2:5025/2000.110 Здравствуйте, уважаемые читатели и почитатели нашего журнала. В третий раз встречаемся мы с вами на этих страницах, и я хочу сказать спасибо Вам, дорогие наши читатели! Спасибо за отзывы и теплые слова в адрес редакции. Спасибо за критику, без нее невозмжно было-бы развитие и движение вперед и, наконец, спасибо всем, кто читает и изучает этот цикл статей, посвященный программированию амижного железа. Мне приходили письма, и я хочу сказать, я рад, что эта рабта приносит свой вклад в развитие программирования на территрии бывшего СССР. Спасибо еще раз всем, пишите Ваши отзывы, пожелания, мы всегда рады Вашим письмам и посылкам :-) Итак, полнстью разобравшись с программированием OSC и ECS чипсетов, в этом номере мы начнем потихньку осваивать AGA. На самом деле программирование AGA ничуть не отличается от программирования старых чипсетов, стоит только учитывать и знать новые особенности и возмжности чипсета. Поэтому, если вы пропустили или недостаточно подробно разобрались с программированием OSC и ECS, я настоятельно рекомендую сделать это до начала чтения этой и последующих статей, поскольку они будут строиться на отличительных особенностях AGA. В этом номере представлена первая часть собранной из различных источников информации по AGA. К четвертому номеру я надеюсь завершить этот цикл статей полным списком всех регистров Амиги с подробным объяснением функций каждого из них. А теперь, перед тем, как начать, разрешите мне поздравить всех вас с Новым 2001 Годом и пожелать в первую очередь счастья вам в личной жизни, здоровья и исполнения всех сокровенных желаний! С НОВЫМ ГОДОМ! СОДЕРЖАНИЕ объяснение новых возможностей AGA список новых экранных режимов AGA с примечаниями формат HAM8 распознавание AGA (пример) адаптация копперлиста к ECS работа с: битпланами скроллинг битпланов по 35ns цветовыми регистрами коппером (пример) спрайтами: задание (пример) перемещение 35 ns изменение цветов superhires переключение цветов VGA hardware setup (пример) copper list (пример) использование функции allocбитmap ОБЪЯСНЕНИЕ НОВЫХ ОСОБЕННОСТЕЙ Битпланы Теперь в вашем распоряжении есть 8 битпланов вместо 6. В режимах с одиночным плейфилдом доступны 256 цветов вместо 64. Все 8 битпланов доступны во всех 3 разрешающих способностях. Каждый плейфилд в режиме dual-playfield может теперь иметь до 4 битпланов. Для каждого плейфилда независимо выбирается 16-ти цветный банк из 256-ти цветной таблицы цветов. Точно также, во всех 3 разрешениях доступен dual-playfield режим 4+4 битплана, но только при выключенном дублировании строк. В противном случае оба плейфилда совместно используют один и тот же регистр модуля. Биты 15 - 8 регистра BPLCON4 содержат 8 битовых масок, позволяющих обменивать выводимые цвета одной командой не нарушая содержимого цветовых регистров. Два дополнительных старших бита позволяют производить бесшовное скроллирование шириной до 64 бит во всех разрешениях. Шаг скроллирования битплана, окна изображения и горизонтальной позиции спрайта достиг 35ns во всех разрешениях. Регистр BPLCON1 содержит 8-ми битовое значение задержки для каждого плейфилда с шагом скроллирования 35 nSec. (1 SHRES пиксель), может производиться скроллирование в 32 битном режиме. Биты BPAGEM и BPL32 в новом регистре FMODE управляют размером выборки данных битплана в BPL1DAT - BPL8DAT. Старый 6 битплановый режим HAM, работает в разрешениях HIRES и SHRES разрешающие. Биты BP1-BP4 содержат значение, функция которого определяется содержимем бит BP5 и BP6. |BP6|BP5| RED | GREEN | BLUE | |-------------------------------------------------| | 0 | 0 | выбор нового базового регистра (1 из 16)| |-------------------------------------------------| | 0 | 1 | задержать | задержать | изменить | |-------------------------------------------------| | 1 | 0 | изменить | задержать | задержать | |-------------------------------------------------| | 1 | 1 | задержать | изменить | задержать | --------------------------------------------------- Введен новый режим HAM. Теперь он использует все 8 битпланов. Этот режим вызывается когда поле BPU регистра BPLCON0 содержит 8, и установлен бит HAMEN. Битпланы 1 и 2 используются как управляющие биты аналогично битпланом 5 и 6 в 6-ти битплановом режиме HAM. |BP2|BP1| RED | GREEN | BLUE | |-------------------------------------------------| | 0 | 1 | выбор нового базового регистра (1 из 64)| |-------------------------------------------------| | 0 | 1 | задержать | задержать | изменить | |-------------------------------------------------| | 1 | 0 | изменить | задержать | задержать | |-------------------------------------------------| | 1 | 1 | задержать | изменить | задержать | --------------------------------------------------- Так как только 6 битпланов доступны для изменения данных, данные размещаются в 6 MSB. 2 LSB оставлены немодифицированными, что позволяет что получение всех 16,777,216 цветов одновременно, используя достаточно большой экран и рассудительный выбор базовых регистров. Этот режим HAM работает также в режимах HIRES и SHRES. С целью совместимости режим EHB остался неизмененным. Его существование спорное, поскольку мы имеем более чем достаточно цветов, чтобы заменить этот режим по функциональности. Как и прежде, EHB вызывается когда SHRES = HIRES = HAMEN = DPF = 0 И BPU = 6. Обратите внимание, что начиная с ECS DENISE в регистре BPLCON2 имеется бит KILLEHB, который отключает этот режим. Биты PF2OF2,1,0 в регистре BPLCON3 определяют смещение цветовых регистров второго плейфилда в цветовой таблице. Это необходимо, поскольку в режиме DPF каждый плейфилд может иметь до 4 битпланов. Добавлена возможность дублирования строк для битпланов и спрайтов. Это предназначено для того, чтобы экраны 15KHz могли правильно отображаться на мониторах 31KHz и совместно использовать дисплей с экранами 31KHz. Бит BSCAN2 в регистре FMODE включает дублирование строк битпланов. Когда бит V0 регистра DIWSTRT соответствует биту V0 вертикального счетчика лучей, BPL1MOD содержит модуль для строки изображения, иначе используется BPL2MOD. При включенном дублировании строк нечетные и четные битпланы используют один и тот же модуль на данной строке, в то время как в нормальном режиме нечетные битпланы используют BPL1MOD, а четные битпланы используют BPL2MOD. В результате DPF экраны будут отображаться неправильно при включенном удвоении линий. Спрайты Расширенная поддержка спрайтов - их разрешение может быть lores, hires, или super-hires, независимо от разрешения экрана. Объединенные спрайты теперь доступны в всех режимах. Однако, некоторые новые режимы с более высокой шириной полосы частот могут только оставлять один спрайт. Нечетные и четные спрайты могут использовать независимые 16 цветные банки цветов из таблицы 256 цветов. Спрайты старого формата имели ширину 16 бит, а спрайты нового формата могут иметь ширину 32 или 64 бит. Спрайты могут опционально появляться в бордюрной области. Горизонтальное разрешение при позиционировании спрайтов увеличилась до 35ns (эквивалентно ширине super-hires пикселя.) Биты SPAGEM и SPR32 в регистре FMODE задают размер загрузки регистров данных спрайтов от SPR0DATA (B) до SPR7DATA (B). Возможные значения 16,32, или 64 бита, аналогично битпланам. BPLCON3 содержит несколько бит, управляющих поведением спрайтов. SPRES1 и SPRES0 управляют разрешающей способностью спрайта, соответствуют ли они стандарту ECS или непосредственно устатавливается LORES, HIRES, или SHRES. BRDRSPRT, когда включен, позволяет спрайтам быть видимыми на бордюре. ESPRM7 - ESPRM4 содержан номер банка для четных спрайтов, а OSPRM7 - OSPRM4 для нечетных. В случае объединенных спрайтов используются биты OSPRM. Бит SSCAN2 в регистре FMODE включает дублирование строк спрайтов. Во включенном состоянии, отдельные биты SH10 в регистрах SPRxPOS содержат значение, показывающее должны ли строки данного спрайта быть продублированными. Когда бит V0 регистра SPRxPOS соответствует биту V0 вертикального счетчика лучей, DMA спрайта работает как и раньше, а если не соответствует, тогда DMA спрайта отключается и LISA многократно использует данные спрайта из предыдущей строки. Когда строки спрайта продублированы, программисту необходимо изменить только координаты и управляюшие регистры, регистры данных не нуждаются в модификации. ПРИМЕЧАНИЕ: Начало и конец спрайта по вертикали должны иметь одну и ту же четность - то есть оба нечетный или оба четные. Совместимость ECS совместимость - Новые чипы при включении питания запускаются в режиме ECS, что позволяет старым самозагружающимся программам выполняться на новых машинах. Это выполнено с помощью $dff1fc FMODE: $0003 = 64-х битная AGA выборка, $0000 = ECS совместимая выборка (16 бит). При использовании 4х или 8ми битовых значений R/G/B, масштабируйте ваши значения до 32 бит дублируя 8ми битовые значения в всех 4 байтах 32 битового числа. При масштабировании 4х битовых значений, дублируйте эти 4 бита в всех полубайтах. Например: 8ми битное значение красного $1F становится равным $1F1F1F1F, а 4х битовое значение $3 становится равным $33333333; Добавился вход RST, который сбрасывает все биты новых регистров для ECS или LISA: BPLCON3, BPLCON4, CLXCON2, DIWHIGH, FMODE. Бит ECSENA (прежде ENBPLCN3) используется для отключения некоторых бит регистра BPLCON3, которые требуют исходного состояния для сохранения совместимости. ECSENA выключает следующие биты: BRDRBLNK, BRDNTRAN, ZDCLKEN, EXTBLKEN, и BRDRSPRT. CLXCON2 сбрасывается при записи в CLXCON, поэтому старые игровые программы будут правильно обрабатывать столкновения объектов. DIWHIGH сбрасывается при записи в DIWSTRT или DIWSTOP. Эта взаимная блокировка унаследована из ECS Denise. Генлок Большое количество новых возможностей добавились к ECS DENISE и остались в LISA. ZDBPEN в BPLCON2 любому битплану, выбранному в ZDBPSEL2,1,0 использоваться в качестве маски прозрачности (содержание веводов ZD отражает выбранный битплан). ZDCTEN отключает старый режим прозрачности цвет00, и позволяет что использовать бит31 каждого цвета в палитре для управления прозрачностью. ZDCLKEN генерирует сигнал частотой 14MHz, синхронизированный с видеоданными который может использоваться видео постпроцессорами. И наконец, BRDNTRAN в BPLCON3 генерирует непрозрачную бордюрную область, которая может использоваться как рамка для живого видео. Палитра Цветовые регистры выросли от 32-х 13-ти битных регистров до 256-ти 25-ти битных (8 бит КРАСНЫЙ, 8 - ЗЕЛЕНЫЙ, 8 - СИНИЙ, плюс 1 бит для Генлока). Это позволяет изображать до 256 отдельных цветов в всех разрешениях. Палитра в 16,777,216 цветов доступна в всех разрешениях. К регистру BLPCON3 добавились несколько новых битов для обеспечения загрузки цветовых регистров. Бит LOCT выбирает MSB или LSB (Старшую или младшую половинку регистра). Для совместимости загрузка MSB всегда загружает LSB, т.е. для загрузки 24 битового цвета LSB должен загружаться после MSB. BANK2,1,0 выбирает один из 8 банков адресов цветовых регистров (по 32 регистра) следующим образом: BANK2 | BANK1 | BANK0 | ИНТЕРВАЛ ЦВЕТОВ -------------------------------------------- 0 | 0 | 0 | цвет00 - цвет1F 0 | 0 | 1 | цвет20 - цвет3F 0 | 1 | 0 | цвет40 - цвет5F 0 | 1 | 1 | цвет60 - цвет7F 1 | 0 | 0 | цвет80 - цвет9F 1 | 0 | 1 | цветA0 - цветBF 1 | 1 | 0 | цветC0 - цветDF 1 | 1 | 1 | цветE0 - цветFF Бит RDRAM бит в регистре BPLCON2 заставляет LISA интерпретировать все обращения к цветовым регистрам как чтение. Важное замечание относительно ЧИСЛА ЦВЕТОВ: Старый IFF код (и даже ранние версии NewIFF) не будет загружать более 32 цветовых регистров. Новые версии были модифицированы. Теперь верхняя граница количества цветов базируется на цветMap->Count в ViewPort . Удалите старые ограничения на 32 регистра и установите новое ограничение на цветMap->Count. Столкновения Новый регистр CLXCON2 содержит 4 новых бита. ENBP7 и ENBP8 - биты разрешения определения столкновений для битпланов 7 и 8, соответственно. Аналогично, MVBP7 и MPBP8 - биты значения столкновения. CLXDAT неизменен. Горизонтальные Компараторы Все программируемые компараторы за исключением VHPOSW имеют разрешающую способность 35nSec: DIWHIGH, HBSTOP, SPRCTL, BPLCON1. BPLCON1 также имеет дополнительные старшие биты. Обратите Внимание что битовая позиция представляющая горизонтальное разрешение 140 nSec изменилась на 3-й младший бит. Например, бит 00 в BPLCON1 назывался PF1H0, а теперь называется PF1H2. Приведение 15KHz к 31KHz: К LISA добавлены возможности для того, чтобы правильно изображать вместе экраны 15KHz и 31KHz на мониторе с частотой 31KHz. LISA может глобально устанавливать разрешение спрайтов в LORES, HIRES или SHRES. При дублировании строк LISA игнорирует бит SH10 в регистре SPRxPOS, используя его для индивидуального управления дублированием строк спрайтов. Новые экранные режимы AGA Режим Битпланов Цветов Ширина выборки (См. примечание 1) ----- --------- ------ --------------------------------- LORES (320x200) 6 64 (не HAM, не EHB) 1 (Установите KillEHB!) 7 128 1 8 256 1 8 HAM 256,000+(см прим. 2) 1 Dual playfield: Максимум 4 битплана на плейфилд, 16 цветов на плейфилд. Для каждого плейфилда ножет выбираться банк в 16 цветов из палитры в 256 цветов. HIRES (640x200) 5 32 2 6 EHB 64 (см прим. 3) 2 6 HAM 4096 (см прим. 4) 2 6 64 (установ. killEHB) 2 7 128 2 8 256 2 8 HAM 256,000+(см прим. 2) 2 Dual playfield: Максимум 4 битплана на плейфилд, 16 цветов на плейфилд. Для каждого плейфилда ножет выбираться банк в 16 цветов из палитры в 256 цветов. SUPERHIRES (1280x200) 1 2 (см прим. 5) 1 2 4 (см прим. 5) 1 3 8 2 4 16 2 5 32 4 6 EHB 64 (см прим. 3) 4 6 HAM 4096 (см прим. 4) 4 6 64 (установ. KillEHB) 4 7 128 4 8 256 4 8 HAM 256,000+(см прим. 2) 4 Dual playfield: Максимум 4 битплана на плейфилд, 16 цветов на плейфилд. Для каждого плейфилда ножет выбираться банк в 16 цветов из палитры в 256 цветов. VGA (160,320,640x480 не интерл. 31Khz - нужен VGA или мультисинк монитор) 1 2 (см прим. 5) 1 2 4 (см прим. 5) 1 3 8 2 4 16 2 5 32 4 6 EHB 64 (см прим. 3) 4 6 HAM 4096 (см прим. 4) 4 6 64 (установ. KillEHB) 4 7 128 4 8 256 4 8 HAM 256,000+(см прим. 2) 4 Dual playfield: Максимум 4 битплана на плейфилд, 16 цветов на плейфилд. Для каждого плейфилда ножет выбираться банк в 16 цветов из палитры в 256 цветов. Super 72 (848x614 интерлейс, кадровая частота 70 Hz) 1 2 как ECS, но без размаз. цветов 1 2 4 как ECS, но без размаз. цветов 1 3 8 цветов 2 4 16 цветов 2 5 32 цветов 4 6 64 цветов (установ. KillEHB) 4 7 128 цветов 4 8 256 цветов 4 6 EHB 32 * 2 цветов 4 6 HAM 4O96 цветов 4 8 HAM любой из 2^24 цветов 4 Dual playfield: Максимум 4 битплана на плейфилд, 16 цветов на плейфилд. Для каждого плейфилда ножет выбираться банк в 16 цветов из палитры в 256 цветов. Скроллирование всех плейфилдов - теперь с шагом 35ns. Ранее шаг был 140ns. Диапазоны скроллирования, программируемые в BPLCON1 +-----------+----------------+----------------+ | Режимы 1X | LORES Пикселей | SHRES Пикселей | +-----------+----------------+----------------+ | LORES | 0-15 | 0-63 | | HIRES | 0-7 | 0-31 | | SHRES | 0-3 | 0-15 | +-----------+----------------+----------------+ +-----------+----------------+----------------+ | Режимы 2X | LORES Пикселей | SHRES Пикселей | +-----------+----------------+----------------+ | LORES | 0-31 | 0-127 | | HIRES | 0-15 | 0-63 | | SHRES | 0-7 | 0-31 | +-----------+----------------+----------------+ +-----------+----------------+----------------+ | Режимы 4X | LORES Пикселей | SHRES Пикселей | +-----------+----------------+----------------+ | LORES | 0-63 | 0-255 | | HIRES | 0-31 | 0-127 | | SHRES | 0-15 | 0-63 | +-----------+----------------+----------------+ Примечания: 1 - Ширина выборки задает ширину выборки данных из памяти, необходимую для определенного экранного режима. Например, VGA экран, глубиной 5 бит требует режима 4x, а VGA экран, глубиной 1 бит - режима 1x. Режим 4х обеспечивает передачу данных в 4 раза быстрее, чем 1х. Для обеспечения правильной выборки данных старшие режимы выборки требуют правильного выравнивания данных в памяти. Режим 1х требует выравнивания по границам слов, режимы 2х - по границам длинных слов, а режимы 4х - по границам квадро слов или, говоря иными словами - по 16, 32 или 64 бита. Подобные требования - лучший повод использовать системные функции захвата памяти. Однако не гарантируется что все машины, имеющие новый чипсет имеют достаточно быструю память, чтобы обеспечивать реимы 4x. Следовательно, единственый способ узнать, будет ли машина поддерживать данный режим - это проверить Экранную Базу Данных. * BANDWIDTH 1: MOVE.W #0,$DFF1FC * BANDWIDTH 2: MOVE.W #2,$DFF1FC ;Битмап, выровненый по 32 битам и ;MODULO = MODULO-4 * BANDWIDTH 4: MOVE.W #3,$DFF1FC ;Битмап, выровненый по 64 битам и ;MODULO = MODULO-8 Эта таблица показывает только минимально требующийся режим выборки для каждого экранного режима. Вы должны всегда пытаться устанавливать максимально широкую выборку если это возможно. 2 - Новый 8-ми битовей режим HAM использует верхние 6 бит указаная на один из 64 базовых 24х битных регистров или как 6ти битное значение изменения текущего значения, а младшие 2 бита используются как команда. В этом режиме возможно одновременное изображение более 256,000 цветов (а если на экране имеется достаточное количество пикселей, то и до 16.8 миллионов цветов). Обратите внимание на то, что хотя регистровые и управляющие битпланы поменялись местами, (Управляющие биты теперь младшие, а не старшие), программы использующие graphics.library и intuition.library не должны обращать на это внимание, поскольку все это обрабатывается автоматически. 3 - Этот режим подобен старому режиму EHB, но в новых разрешениях. Этот режим использует 5 битпланов для получения 32 цветов, плюс шестой битплан для 32 цветов с половинной яркостью. 4 - Этот режим подобен старому режиму HAM, но в новых разрешениях. Он использует младшие 4 бита для указания 16 цветовых регистров или значения изменения и старшие 2 бита команды. В этом режиме доступно ихображения одновременно 4096 цветов. 5 - Эти режимы - в отличие от старых режимов VGA и SUPERHIRES не ограничены нестандартной 64х цветной палитрой. ******************************************************************************* Формат HAM-8 Ham-8 использует *нижние* два бита в качестве команды (выбор нового регистра или изменение Красной, Зеленой или Синей компонент, как и в стандарте HAM), и *верхние* 6 бит ( планы 2 - 7 ) как номер регистра (0 - 63), или как 6ти битовое значение hold-and-modify для изменения верхних 6 бит 8ми битного цветового значения. Самые младшие два бита цветового значения не изменяются, так что начальная палитра должна выбираться осторожно (например, используя AdPro или что-нибудь еще, что делает это лучше) Программирование AGA чипсета Программа обнаружения чипсета AGA Эта программа позволяет обнаружить наличие чипсета AGA на 101 %... (За последний процент спасибо DDT/HBT). Эта программа будет обнаруживать AGA на будущих модифицикациях AGA машин. Взамен создание CMPI.B $f8,$dff07c.) на тех новых AGA машинах только старый чипсет будет обнаружен !!!! AGA DETECT ROUTINE: This is my AGA detect routine 101%... (thanx to DDT/HBT for the last 1%) It will detect AGA on the future updated AGA machines. Instead making a CMPI.B #$f8,$dff07c on that new AGA machines only old chipset will be detected!!!! LEA $DFF000,A5 MOVE.W $7C(A5),D0 ; Проверка DeniseID или LisaID на AGA MOVEQ #30,D2 ; Проверяем 30 раз (на старой denise случайной число) ANDI.W #%000000011111111,d0 ; только младший байт DENLOOP: MOVE.W $7C(A5),D1 ; Denise ID (LisaID на AGA) ANDI.W #%000000011111111,d1 ; только младший байт CMP.B d0,d1 ; такое-же значеине? BNE.S NOTAGA ; нет, значит OCS Denise! DBRA D2,DENLOOP ; ORI.B #%11110000,D0 ; маскируем версию AGA CMPI.B #%11111000,D0 ; бит 3=AGA (этот бит будет =0 в AAA!) BNE.S NOTAGA ; AGA присутствует? ST.B AGA ; Устанавливаем AGA флаг. NOTAGA: ; не AGA, но возможно AAA чипсет! Мне потребовалось исправить больше 3 AGA демок, которые на моей А4000 говорили: YOU NEED AN AGA MACHINE (!!)... эти демки: NOP 1/muffbusters, RedNexRevivalIntro (с плохим тестом процессора) и другие.. *************************************************************************** Для того, чтобы сделать демо для обычной Амиги работоспособным на чипсете AGA вставьте следующие строчки в Ваш копперлист: dc.w $106,$c00 ;Выключение AGA спрайтов, палитры и DPF dc.w $1FC,0 ;Выключение AGA выборки для спрайтов и битпланов. И не забудьте устанавливать значения BPL1MOD($108), BPL2MOD($10a), DIWSTRT($8e) и DIWSTOP($90), иначе Вы будете получать значения, используемые в WB. ******************************************************************************* Битпланы: От 0 до 7 битпланов устанавливаются как и прежде в регистре BPLCON0 ($dff100). Восемь битпланов устанавливаются установкой бита 4 регистра BPLCON0, биты 12-14 должны быть 0 Для Hires при 8 битпланах не забудьте установить биты 0 и 1 регистра FMODE ($dff1fc) 8 битпланов: Число используемых битпланов определяется битами 12-14 регистра BPLCON0. Поскольку для этой цели имеется всего 3 бита невозможно было использовать больше 7 битпланов. Для использования 8 битпланов введен специальный бит - бит 4. При его использовании не забудьте обнулить биты 12-14 для будущей совместимости :) бит 4 | 8 битпланов ------------------------ 0 | не выбрано ------------------------ 1 | выбрано ------------------------ Использование 64х-цветного режима (не EHB) требует установки бита KILLEHB (бит 9) в регистре BPLCON2 Гладкий Скроллинг К регистру BPLCON1 добавлены дополнительные биты, позволяющие осуществлять более правный скроллинг большей области. Биты 8 (PF1H0) и 9 (PF1H1) - новые биты прокрутки высокого разрешения для первого плейфилда, а биты 12 (PF2H0) и 13 (PF2H1) - новые биты для второго плейфилда. Еще по два бита добавлены к каждому плейфилду для обеспечения максимального расстояния скроллирования, равного 64 пикселям низкого разрешения или 256 пикселям в SHires (вместо 16 пикселей низкого разрешения) Это биты 10 (PF1H6) и 11 (PF1H7) для первого плейфилда и биты 14 (PF2H6) и 15 (PF2H7) для второго плейфилда. Обычный режим остается работоспособен, а для включения новых возможностей кроме установки новых бит необходимо использовать ширину выборки 2х или 4х. ******************************************************************************* Цветовые Регистры: Теперь имеются 256 цветовых регистров, доступ к которым осуществляется посредством старых 32 регистров. AGA работает с 8 различными палитрами по 32 цвета в каждой, многократно используя цветовые регистры цвет00 - цвет31 ($0180 - $01BE). Текущая палитра выбирается используя биты BANK0-BANK2 (13-15) регистра BPLCON3 ($0106) бит 15 | бит 14 | бит 13 | Выбранная палитра -------+--------+--------+------------------------------ 0 | 0 | 0 | Палитра 0 (цвета 0 - 31) 0 | 0 | 1 | Палитра 0 (цвета 32 - 63) 0 | 1 | 0 | Палитра 0 (цвета 64 - 95) 0 | 1 | 1 | Палитра 0 (цвета 96 - 127) 1 | 0 | 0 | Палитра 0 (цвета 128 - 159) 1 | 0 | 1 | Палитра 0 (цвета 160 - 191) 1 | 1 | 0 | Палитра 0 (цвета 192 - 223) 1 | 1 | 1 | Палитра 0 (цвета 224 - 255) ******************************************************************************* Чтобы записать 24-х битное значение в цветовой регистр требуется две записи в регистры: - Сначала очистите бит 9 (LOCT) регистра BPLCON3 ($dff106). - Запишите старшие полубайты каждого цвета в цветовые регистры. - Затем установите бит 9 (LOCT) регистра BPLCON3 ($dff106). - Запишите младшие полубайты каждого цвета в цветовые регистры. бит 9 | Доступ к: ------------------------------ 0 | 4 старшим битам R,G,B ------------------------------ 1 | 4 младшим битам R,G,B ------------------------------ Вы должны соблюдать порядок записи: сначала записываем 3 * 4 СТАРШИХ БИТ, а затем 3 * 4 МЛАДШИХ БИТ! Например, чтобы заменить нулевой цвет на цвет $123456 $01060000 dc.l $01800135 dc.l $01060200 dc.l $01800246 dc.l Если вы используете цвета 12-ти битный цвет, рассматриваются только старшие биты каждой из цветовых компонент (RGB). ПРИМЕР КОППЕРЛИСТА ДЛЯ AGA DC.W $106,$c00 ;Выбираем палитру 0 (0-31), старшие полубайты COLP0: DC.W $180,$000,$182,$000,$184,$000,$186,$000 ;Старшие полубайты DC.W $188,$000,$18A,$000,$18C,$000,$18E,$000 ;цветов 0-31 DC.W $190,$000,$192,$000,$194,$000,$196,$000 ; DC.W $198,$000,$19A,$000,$19C,$000,$19E,$000 ; DC.W $1A0,$000,$1A2,$000,$1A4,$000,$1A6,$000 DC.W $1A8,$000,$1AA,$000,$1AC,$000,$1AE,$000 DC.W $1B0,$000,$1B2,$000,$1B4,$000,$1B6,$000 DC.W $1B8,$000,$1BA,$000,$1BC,$000,$1BE,$000 DC.W $106,$e00 ;Выбираем палитру 0 (0-31), младшие полубайты COLP0B: DC.W $180,$000,$182,$000,$184,$000,$186,$000 ;Младшие полубайты DC.W $188,$000,$18A,$000,$18C,$000,$18E,$000 ;цветов 0-31 DC.W $190,$000,$192,$000,$194,$000,$196,$000 ; DC.W $198,$000,$19A,$000,$19C,$000,$19E,$000 ; DC.W $1A0,$000,$1A2,$000,$1A4,$000,$1A6,$000 DC.W $1A8,$000,$1AA,$000,$1AC,$000,$1AE,$000 DC.W $1B0,$000,$1B2,$000,$1B4,$000,$1B6,$000 DC.W $1B8,$000,$1BA,$000,$1BC,$000,$1BE,$000 DC.W $106,$2C00 ;Выбираем палитру 1 (31-63), старшие полубайты COLP1: DC.W $180,$000,$182,$000.... и т.д. DC.W $106,$2E00 ;Выбираем палитру 1 (31-63), младшие полубайты COLP1B: DC.W $180,$000,$182,$000.... и т.д. DC.W $106,$4C00 ;Выбираем палитру 2 (64-95), старшие полубайты COLP2: DC.W $180,$000,$182,$000.... и т.д. DC.W $106,$4E00 ;Выбираем палитру 2 (64-95), младшие полубайты COLP2B: DC.W $180,$000,$182,$000.... и т.д. DC.W $106,$6C00 ;Выбираем палитру 3 (96-127), старшие полубайты COLP3: DC.W $180,$000,$182,$000.... и т.д. DC.W $106,$6E00 ;Выбираем палитру 3 (96-127), младшие полубайты COLP3B: DC.W $180,$000,$182,$000.... и т.д. DC.W $106,$8C00 ;Выбираем палитру 4 (128-159), старшие полубайты COLP4: DC.W $180,$000,$182,$000.... и т.д. DC.W $106,$8E00 ;Выбираем палитру 4 (128-159), младшие полубайты COLP4B: DC.W $180,$000,$182,$000.... и т.д. DC.W $106,$AC00 ;Выбираем палитру 5 (160-191), старшие полубайты COLP5: DC.W $180,$000,$182,$000.... и т.д. DC.W $106,$AE00 ;Выбираем палитру 5 (160-191), младшие полубайты COLP5B: DC.W $180,$000,$182,$000.... и т.д. DC.W $106,$CC00 ;Выбираем палитру 6 (192-223), старшие полубайты COLP6: DC.W $180,$000,$182,$000.... и т.д. DC.W $106,$CE00 ;Выбираем палитру 6 (192-223), младшие полубайты COLP6B: DC.W $180,$000,$182,$000.... и т.д. DC.W $106,$EC00 ;Выбираем палитру 7 (224-255), старшие полубайты COLP7: DC.W $180,$000,$182,$000.... и т.д. DC.W $106,$EE00 ;Выбираем палитру 7 (224-255), младшие полубайты COLP7B: DC.W $180,$000,$182,$000.... и т.д. ******************************************************************************* Bplmod: В AGA режимах модуль обычно такой-же, как и в нормальном режиме минус 8. Так, если обычный модуль = 0, то agamodulo = -8. (Если вы используете FMODE=3!), если вы используете FMODE =2, тогда модуль = -4 . ******************************************************************************* Спрайты: Разрешение спрайта изменяется использованием бит 7 и 6 (SPRES0-1) регистра $0106 (BPLCON3) Бит 7 | бит 6 | Разрешtybt ------+-------+----------- 0 | 0 | ECS по умолчанию (Lo-res/Hi-res = 140ns, Superhires = 70ns) 0 | 1 | Всегда lowres (140ns) 1 | 0 | Всегда hireres (70ns) 1 | 1 | Всегда superhires (35ns) -------------------------- (70ns спрайты не могут быть доступны если бит lace в BPLCON0 не установлен ) ******************************************************************************* Для установки ширины спрайтов, равной 32 и 64 бита используются биты 3 (SPAGEM) и 2(SPR32) регистра $01FC(FMODE). Формат спрайта (в частности управляющие слова) различен для каждой ширины. Бит 3 | бит 2 | Ширина | Управляющие Слова ------+-------+-------------+------------------------------------------ 0 | 0 | 16 пикселей | 2 слова (нормальные) 1 | 0 | 32 пикселя | 2 длинных слова 0 | 1 | 32 пикселя | 2 длинных слова 1 | 1 | 64 пикселя | 2 двойных длинных слова (4 длинных слова) ----------------------------------------------------------------------- Более широкие спрайты не доступны ни каким образом. Copper читает спрайт листы по разному, в зависимости от ширины вашего спрайта. Адрес спрайта, шириной 16 пикселей должен быть кратен 2 Адрес спрайта, шириной 32 пикселей должен быть кратен 4 Адрес спрайта, шириной 64 пикселей должен быть кратен 16 Чтение управляюших слов спрайта, шириной 16 пикселей слово C1, слово C2 слово A1, слово B1 . . . слово An, слово Bn $0000 0000 C1=первое управляющее слово C2=второе управляющее слово Ai и Bi объединяясь по OR формируют изображение спрайта. Чтение управляюших слов спрайта, шириной 32 пикселя CNOP 0,8 ;выравниваем по 64 битам SPRITE32: ;Пример AGA спрайта, шириной 32 пикселя VSTART: dc.b 0 ;длинное C1 HSTART: DC.b 0 DC.W 0 VSTOP: DC.b 0,0 ;длинное C2 dc.w 0 dc.L %00000000000000111100000000000000,%0000000000001000000000000000000;sprite dc.L %00000000000011111111000000000000,%0000000000010111100000000000000 длинное слово A3, длинное слово B3 . . . длинное слово An, длинное слово Bn DC.W 0,0,0,0 ;конец впрайта C1=первое управляющее длинное слово Первое управляющее слово содержится в старшем слове C1. Младшее слово C1 должно содержать второе управляющее слово. C2=второе управляющее длинное слово Второе управляющее слово содержится в старшем слове C2. Младшее слово C2 должно быть равно $0000 Общий порядок расположения управляющих слов: С1 С2 С2 00 Ai и Bi объединяясь по OR формируют изображение спрайта. Чтение управляюших слов спрайта, шириной 64 пикселя CNOP 0,8 ;выравниваем по 64 битам SPRITE64: ;Пример AGA спрайта, шириной 32 пикселя VSTART: DC.B 0 ;двойное длинное слово C1 HSTART: DC.B 0 DC.W 0 DC.L 0 VSTOP: DC.B 0,0 ;двойное длинное слово C2 DC.W 0 DC.L 0 двойное длинное слово A1, двойное длинное слово B1 . . . двойное длинное слово An, двойное длинное слово Bn DC.W 0,0,0,0,0,0,0,0 ;конец спрайта C1=первое управляющее двойное длинное слово C1=W3:W2:W1:W0 (Wi=слова) W3 первое управляющее слово W2 и W1 второе управляющее слово C2=второе управляющее двойное длинное слово C2=W3:W2:W1:W0 (Wi=слова) W3 is второе управляющее слово Общий порядок расположения управляющих слов: С1 С2 С2 00 С2 00 00 00 Ai и Bi объединяясь по OR формируют изображение спрайта. *************************************************************************** Перемещение спрайтов с точностью 1/4 пикселя: Используйте биты 3 и 4 второго слова управляющего слова спрайта для установки позиции мпрайта с точностью 1/4 lowres пикселя (каждый пиксель в SuperHires ): Бит 0 второго управляющего слова = бит 2 горизонтальной позиции. Бит 3 второго управляющего слова = бит 0 горизонтальной позиции. Бит 4 второго управляющего слова = бит 1 горизонтальной позиции. Позиция спрайта теперь закодирована 11 битами. *************************************************************************** Изменение палитры спрайтов: Все спрайты используют для изображения одну 16 цветную палитру. Результат получается следующий: Спрайты | Цвета ------------------ 0-1 | 00-03 2-3 | 04-07 4-5 | 08-11 6-7 | 12-15 ------------------ Раньше вы могли использовать только ОДНУ палитру для всех изображаемых спрайтов. Эта палитра располагалась в цветовых регистрах 15 к цвету 31. Теперь вы можете изображать нечетные и четные спрайты в разных палитрах. Поскольку доступно 256 цветов, это дает 16 палитр по 16 цветов в каждой. Вы можете выбрать палитру, которая будет использоваться для изображения нечетных спрайтов и которая будет использоваться для изображения четных спрайтов. Цвета, используемые спрайтами в 16 цветной палитре такие-же как обычно: Спрайты | Цвета ----------------------------------------- 0 | 00-03 палитры четных спрайтов 2 | 04-07 палитры четных спрайтов 4 | 08-11 палитры четных спрайтов 6 | 12-15 палитры четных спрайтов ----------------------------------------- 1 | 00-03 палитры нечетных спрайтов 3 | 04-07 палитры нечетных спрайтов 5 | 08-11 палитры нечетных спрайтов 7 | 12-15 палитры нечетных спрайтов ----------------------------------------- Биты 4 - 7 (ESPRM) регистра BPLCON4 ($DFF010C) используются для выбора палитры, используемой для изображения четных спрайтов, биты 0 - 3 (OSPRM) регистра BPLCON4 ($DFF010C) используются для выбора палитры, используемой для изображения нечетных спрайтов, бит 3 | бит 2 | бит 1 | бит 0 | Нечетные спрайты бит 7 | бит 6 | бит 5 | бит 4 | Четные спрайты ------+-------+-------+-------+------------------------------------------ 0 | 0 | 0 | 0 | $0180/палитра 0 (цвет 0) 0 | 0 | 0 | 1 | $01A0/палитра 0 (цвет 15) 0 | 0 | 1 | 0 | $0180/палитра 1 (цвет 31) 0 | 0 | 1 | 1 | $01A0/палитра 1 (цвет 47) 0 | 1 | 0 | 0 | $0180/палитра 2 (цвет 63) 0 | 1 | 0 | 1 | $01A0/палитра 2 (цвет 79) 0 | 1 | 1 | 0 | $0180/палитра 3 (цвет 95) 0 | 1 | 1 | 1 | $01A0/палитра 3 (цвет 111) 1 | 0 | 0 | 0 | $0180/палитра 4 (цвет 127) 1 | 0 | 0 | 1 | $01A0/палитра 4 (цвет 143) 1 | 0 | 1 | 0 | $0180/палитра 5 (цвет 159) 1 | 0 | 1 | 1 | $01A0/палитра 5 (цвет 175) 1 | 1 | 0 | 0 | $0180/палитра 6 (цвет 191) 1 | 1 | 0 | 1 | $01A0/палитра 6 (цвет 207) 1 | 1 | 1 | 0 | $0180/палитра 7 (цвет 223) 1 | 1 | 1 | 1 | $01A0/палитра 7 (цвет 239) ------------------------------------------------------------------------- ******************** ЭТО ВАЖНО ************************ Битпланы, спрайты и копперлисты должны быть в некоторых случаях выровнены по границам 64 бит. Например для того, чтобы использовать 64х битную выборку или 64х битный скроллинг битпланов. Это также поднимает другую проблему. Вы больше не можете непосредственно использовать AllocMem() для выделения памяти для битпланов или спрайтов. Можно делать так: используя AllocMem (размер_битпланов + 8) и вычисляя количество байт, которые нужно пропустить в начале, чтобы дать выравнивание по 64 битам (не забывйте о том, что размер битплана может быть не кратем 64 битам, поэтому выделяйте память для каждого битплана отдельно или удостоверьтесь, что размер битплана кратен 64 битам). Другой путь - это использование новой функции V39 AllocBitMap(). Третий путь - это непосредственное выравнивание в исходном тексте программы. Например: CNOP 0,8 sprite incbin "myspritedata" CNOP 0,8 битplane incbin "myбитplane" и т.д. ЕСЛИ ВЫ ЗАБЫЛИ ВЫРАВНЯТЬ ПО 64 БИТАМ, ИЗОБРАЖЕНИЕ БУДЕТ ПОЯВЛЯТЬСЯ ОБРЕЗАННОЕ. Общая ошибка - указатели на нежелательные спрайты указывающие на $0. Если длинное слово по этому адресу не равно нулю, вы получите несколько прекрасно смотрящихся спрайтов в самых непредсказуемых местах. Правильный способ избавления от спрайтов состoит в том, чтобы указывать на адрес который наверняка содержит - $00000000.) (0.l), а с AGA вы можете указывать на ЧЕТЫРЕ длинных слова, равных 0, выровненных по 64 битам. *************************************************************************** ИСПОЛЬЗОВАНИЕ РЕЖИМА SUPERHIRES Чтобы использовать режим SuperHires (Шириной 1280 пикселей), просто включите бит 6 (SHRES) из регистра BPLCON0 ($0100) бит 6 | Режим SuperHires ------------------------ 0 | Выключен 1 | Включен ------------------------ *************************************************************************** ПЕРЕКЛЮЧЕНИЕ ПАЛИТРЫ Вы можете переключать цвета в палитре. Операция переключения между цветом A и B определяется следующим образом: - Содержание цветовых регистров не изменяются - Все, что изображалось цветом A теперь изображается цветом B, и все, что изображалосл цветом B теперь изображается с цветом А Для переключения используются биты 8-15 (BPLAM) регистра BPLCON4 ($DFF10C): Бит 15 14 13 12 11 10 09 08 Имя S7 S6 S5 S4 S3 S2 S1 S0 При включении бита Sn, железо начинает действовать следующим образом: - Группа из 2^n цветов, начиная от цвета 00 до цвета (2^n)-1 меняется местами с группой из 2^n цветов, начиная от цвета 2^n до цвета 2^n+(2^n)-1 - Группа из 2^n цветов, начиная от цвета 2*2^n до цвета 2*2^n+(2^n)-1 меняется местами с группой из 2^n цветов от цвета 3*2^n до цвета 3*2^n+(2^n)-1 - ... Операция заканчивается, при достижении конца 256 цветной палитры. Например: Выбран бит Sn=1. На рисунке показано, что представляет собой палитра до и после переключения. Копперлист абсолютно не изменяется: Перед | После --------------------------------- цвет 00 | цвет 02 цвет 01 | цвет 03 цвет 02 | цвет 00 цвет 03 | цвет 01 цвет 04 | цвет 06 цвет 05 | цвет 07 цвет 06 | цвет 04 цвет 07 | цвет 05 ... | ... В этом примере цвета поменялись местами, используя группы из 2^1=2 цветов Вы не можете переключить между собой два цвета. Если вы изменяете любой бит Sn, то это воздействует на целую палитру. Операции переключения могут oбъединяться. Если выбрано больше чем один бит Sn, операции переключения для каждого бита будут выполняться последовательно, начиная с S0. Например: BPLCON4 ($DFF10C) содержит $0500. Влючены биты S0 и S2. Первое переключение использует группы из 2^0 цветов, а второе из 2^2 цветов: Перед | После S0 | После S2 --------------------------------------------- цвет 00 | цвет 01 | цвет 05 цвет 01 | цвет 00 | цвет 04 цвет 02 | цвет 03 | цвет 07 цвет 03 | цвет 02 | цвет 06 цвет 04 | цвет 05 | цвет 01 цвет 05 | цвет 04 | цвет 00 цвет 06 | цвет 07 | цвет 03 цвет 07 | цвет 06 | цвет 02 цвет 08 | цвет 09 | цвет 13 цвет 09 | цвет 08 | цвет 12 цвет 10 | цвет 11 | цвет 15 цвет 11 | цвет 10 | цвет 14 цвет 12 | цвет 13 | цвет 09 цвет 13 | цвет 12 | цвет 08 цвет 14 | цвет 15 | цвет 11 цвет 15 | цвет 14 | цвет 10 ... | ... | ... *************************************************************************** Режим VGA/PRODUCTIVITY 640x480 без интерлейса Этот режим поддерживается на Амиге начиная с первых ECS машин и требует наличия мультискан монитора. В AGA чипсете этот режим значительно усовершенствован: теперь в этом режиме можно использовать 256-ти цветные и HAM8 экраны. NTSC (525 строк, 227.5 тактов на строку) PAL (625 строк, 227.5 тактов на строку) VGA (525 строк, 114.0 тактов на строку) Программируемая синхронизация осуществляется через 5 новых усовершенствованных регистров Agnus: VSSTRT W A Вертикальная позиция начала VSYNC. VSSTOP W A Вертикальная позиция остановки VSYNC HSSTRT W A Горизонтальная позиция начала HSYNC. HSSTOP W A Горизонтальная позиция остановки HSYNC HCENTER W A Горизонтальная позиция Vsync при интерлейсе Удовлетворительный результирующий сигнал получается при установке HCENTER на половину горизонтальной строки с HSSTRT, а HBSTOP на (HSSTOP-HSSTRT) перед HCENTER и HBSTRT на (HSSTOP-HSSTRT) перед HSSTRT. Программируемый обратный ход выполняется через четыре новых регистра ECS Agnus: HBSTRT W A Горизонтальная позиция начала HBLANK HBSTOP W A Горизонтальная позиция останова HBLANK VBSTRT W A Вертикальная позиция начала VBLANK VBSTOP W A Вертикальная позиция останова VBLANK Для того, чтобы сменить горизонтальную частоту с 15KHz (TV, монитор 1084) на 31 KHz необходимо изменить значение регистра BEAMCON0 ($dff1dc) и установить правильные значения в других регистрах. Пример: LEA $DFF000,A0 MOVE.W #%0001101110001000,$1DC(A0) ;BEAMCON0 ;3 - Комплексное гашение на выходе CSY ;7 - Включение программируемого счетчика луча ;8 - Включение программируемой горизонтальной синхронизации ;9 - Включение программируемой вертикальной синхронизации ;11- Выключение переключателя ДЛИННАЯ/КОРОТКАЯ строка ;12- Включение программируемого обратного хода луча. MOVE.W #$71,$1C0(A0) ;HTOTAL - наибольшее значение счетчика гориз. линий MOVE.W #8,$1C4(A0) ;HBSTRT - Позиция гориз линии для HBLANK START MOVE.W #14,$1DE(A0) ;Начало горизонтальной синхронизации MOVE.W #$1C,$1C2(A0) ;Позиция гориз линии для HSYNC STOP MOVE.W #$1E,$1C6(A0) ;Позиция гориз линии для HBLANK STOP MOVE.W #$46,$1E2(A0) ;Гориз. позиция для VSYNC при интерлейсе. MOVE.W #$20C,$1C8(A0) ;VTOTAL - Наибольшее значение счетчика верт линий. MOVE.W #0,$1CC(A0) ;Вертикальная линия начала верт обратного хода MOVE.W #3,$1E0(A0) ;Начало верт синхронизации ; MOVE.W #$200,$1E4(A0) MOVE.W #$100,$1E4(A0) MOVE.W #5,$1CA(A0) ;Позиция верт линии для VSYNC STOP MOVE.W #$1D,$1CE(A0) ;Верт. линия для VBLANK STOP MOVE.W #%00010010,$104(A0) ; MOVE.W #%0000110000100001,$106(A0) ; 0 - Включение внешнего гашения ; 5 - Гашение бордюра ; 10-11 Fix AGAшного дуал-плейфилд. MOVE.W #$1241,$100(A0) ;Режим VGA с 2 цветами ; MOVE.W #$1245,$100(A0) ;На AGA машине требует битплан, ;но запомните, что надо поместить $3 в $dff1fc если вам ;надо более 2 цветов (Старый ECS режим) Затем установите указатель на ваш копперлист. Запомните, что бит 0 регистра $dff100 должен быть включен для включения всех вохможностей ECS и AGA, а если вам надо более 4 цветов, вы ДОЛЖНЫ установить биты 0 и 1 регистра $dff1fc и выровнять битпланы по 64м битам. Удачи вам, и запомните, что выбор монитора должен быть оформлен в виде окна или какого-нибудь другого ДРУЖЕСТВЕННОГО К СИСТЕМЕ реквестера Пример копперлиста для AGA (проверено на А1200+VGA монитор) COPPERLIST: ;Не забудьте установить сначала регистры ECS ! ; Указатели спрайтов dc.l $C01FFFE dc.l $1800F00 BPLP: dc.l $E00000 ;Указатели битпланов dc.l $E20000 ;указываю на картинку 640x480 dc.l $E40000 ;также, как в интерлейсе dc.l $E60000 dc.l $E80000 dc.l $EA0000 dc.l $EC0000 dc.l $EE0000 DC.W $180,0 ;модуль DC.W $10A,0 dc.W $8E,$1c45 ;diwstrt dc.W $90,$ffe5 ;diwstop dc.W $92,$0018 ;ddfstrt dc.W $94,$0068 ;ddfstop dc.w $1e4,$100 ;Здесь задается палитра... такая же, как и нормальная палитра на AGA dc.w $1fc,$8003 DC.W $100,$1241 ;bplcon0 dc.l $FFFFFFFE ;конец копперлиста dc.l $FFFFFFFE *************************************************************************** Использование функции AllocBitmap allocbitap "graphics.library" V39 новая функция для захвата битмапов. AllocbitMap -- Захватывает битмап и прикрепляет к нему битпланы. (V39) bitmap=AllocbitMap(sizex,sizey,depth, flags, friend_bitmap) -918 d0 d1 d2 d3 a0 struct bitMap *AllocbitMap(ULONG,ULONG,ULONG,ULONG, struct bitMap *); Захватывает и инициализирует структуру битмапов. Устанавливает указатели на планы. НА ВХОДЕ: sizex = ширина (в пикселях) битплана. sizey = высота (в пикселях). depth = глубина (число битпланов для захвата) flags = BMF_CLEAR - очистка битмапа. BMF_DISPLAYABLE - битмап на AGA машинах показывается во всех режимах BMF_INTERLEAVED - интерлейвные битпланы. friend_битmap = Указатель на другой битплан или NULL. Если указатель присутствует, битмап выделяется так, что блит между двумя битмапами упрощается Для освбождения захваченного битмапа используйте FREEbitMAP(V39) FreeбитMap -- освбождение битмапа, захваченного AllocbitMap FreeбитMap(bm) -924 a0 VOID FreebitMap(struct bitMap *) освбождает битмап и все прикрепленные битпланы. ------------------------------------------------------------------------------- Извините за возможные опечатки по ходу текста, надеюсь, они не сильно помешали Вам освоить некоторые премудрости программирования AGA. До встречи в следующем номере!